package org.bibpessoal.mbeans;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

import org.bibpessoal.entidades.Livro;
import org.bibpessoal.entidades.Usuario;
import org.bibpessoal.exceptions.UsuarioInvalidoException;
import org.bibpessoal.fachada.BiblitoecaPessoalFachada;

@ManagedBean(name="livroMB")
@RequestScoped
public class LivroMB {
	
	@EJB
	private BiblitoecaPessoalFachada fachada;

	@ManagedProperty(value="#{usuarioMB.usuario}")
	private Usuario usuario; // usuário autenticado
	private Livro livro;
	private List<Livro> livrosDaBusca;
	private List<Livro> livros; // Variavel Reutilizável para Listas de Livros | Evitar conflitos com variaveis "LivrosDaBusca"
	private String mensagem, query;
	private List<Livro> livrosEmprestados;

	public LivroMB() {
		super();
		this.livro = new Livro();		
		this.livrosDaBusca = new ArrayList<Livro>();
		this.livrosEmprestados = new ArrayList<Livro>();
		this.mensagem = null;
		
	}
	

	//Render Start Method
	
	@PostConstruct
	public void initialize(){
		getUserLivros();
	}
	
	//Render Start Method End
	
	public Livro getLivro() {
		return livro;
	}
	public void setLivro(Livro livro) {
		this.livro = livro;
	}
	public String getMensagem() {
		String retorno = mensagem;
		mensagem = null;
		return retorno;
	}
	public boolean isComMensagem() {
		return mensagem != null;
	}
	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}
	public boolean isTemResultadosDeBusca() {
		return !this.livrosDaBusca.isEmpty();
	}
	public boolean isNaoTemResultadosDeBusca() {
		return this.livrosDaBusca.isEmpty();
	}
	public boolean isTemLivrosEmprestados() {
		return !this.getLivrosEmprestados().isEmpty();
	}

	public String cadastrar(){
		try {
			fachada.cadastrarLivro(usuario, livro);
		} catch (Exception e) {
			this.mensagem = e.getMessage();
			return "cadastro_livro.jsp";
		}
		return "biblioteca.jsp";
	}
	public Usuario getUsuario() {
		return usuario;
	}
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	public List<Livro> getLivrosDaBusca() {
		return livrosDaBusca;
	}
	public void setLivrosDaBusca(List<Livro> livrosDaBusca) {
		this.livrosDaBusca = livrosDaBusca;
	}
	public String busca() {
		try {
			// hotfix para evitar NullPointerException
			if(usuario == null){
				throw new UsuarioInvalidoException("O usuário deve estar logado");
			}
			
			this.livrosDaBusca = fachada.buscarLivro(query, usuario.getId());
		} catch (UsuarioInvalidoException e) {
			this.mensagem = e.getMessage();
		}
		return "busca.jsp";
	}
	
	public String getQuery() {
		return query;
	}
	public void setQuery(String query) {
		this.query = query;
	}
	

	public List<Livro> getLivrosEmprestados() {
		// emprestimoDAO.SelectAllLate();
		// this.livrosEmprestados = fachada.getLivrosEmprestadosAMaisDeUmMes();
		return livrosEmprestados;
	}

	public void getUserLivros(){
		try {
			this.livros = fachada.getLivrosPorUsuario(usuario.getId());
		} catch (UsuarioInvalidoException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}			
	}
	
	
	public List<Livro> getLivrosFromUsuario(int idUsuario) throws UsuarioInvalidoException{
		livros = fachada.getLivrosPorUsuario(idUsuario);
		return livros;		
	}
	
	public List<Livro> getLivros(){
		return this.livros;
	}
	
	public void setLivros(List<Livro> livros) {
		this.livros = livros;
	}
	

}
